#include <bits/stdc++.h>

using namespace std;

const int MAXN = 3e6+50;
const int mod = 998244353;
const int g = 3;

typedef long long ll;

int x1[MAXN],x2[MAXN],rev[MAXN];
char a[MAXN],b[MAXN];

int qp(ll x,int t){ll res=1;for(;t;t>>=1,x=x*x%mod)if(t&1)res = res*x%mod;return (int)res;}

void change(int *y,int l){
	for(int i = 1;i < l;i++) rev[i] = (rev[i>>1]>>1)|(i & 1 ? l >> 1 : 0);
	for(int i = 1;i < l;i++) if(i < rev[i]) swap(y[i],y[rev[i]]);
}

void ntt(int *f,int l,int on){
	change(f,l);
	for(int h = 2;h <= l;h<<=1){
		int gn = qp(g,(mod-1)/h);
		for(int j = 0;j < l;j+=h){
			int gg = 1;
			for(int k = j;k < j + h/2;k++){
				int u = f[k],v = 1ll * f[k + h/2] * gg % mod;
				f[k] = (u + v) % mod; f[k + h/2] = ((u - v) % mod + mod) % mod; gg = 1ll * gg * gn % mod;
			}
		}
	}
	if(on == -1){reverse(f+1,f+l);int inv = qp(l,mod-2);for(int i = 0;i < l;i++) f[i] = 1ll * f[i] * inv % mod;}
}

int main (){
	scanf("%s %s",a,b);int len1 = strlen(a),len2 = strlen(b),len = 1;while(len < len1 * 2 || len < len2 * 2)len<<=1;
	for(int i = 0;i < len1;i++) x1[i] = a[len1 - i - 1] - '0';for(int i = 0;i < len2;i++) x2[i] = b[len2 - i - 1] - '0';
	ntt(x1,len,1);ntt(x2,len,1);for(int i = 0;i < len;i++) x1[i] = 1ll * x1[i] * x2[i] % mod; ntt(x1,len,-1);
	for(int i = 0;i < len;i++) x1[i+1] += x1[i] / 10,x1[i] %= 10;len = len1 + len2 - 1; while(x1[len] == 0&& len) len--;
	for(int i = len;i >= 0;i--) putchar(x1[i]+'0');puts("");return 0;
}
